#pragma once
 
#include <stdio.h>
#include <string.h>
#include "wavfmt.h"
 
class WaveReader
{
private:
    FILE *f;
    WaveFormatExtensible fmtext;
    Int64 data_pos;  // 实际音频数据在文件中的位置
    Int64 data_size; // 文件中音频数据的大小
    Int64 read_size; // 当前已经读取的音频数据大小
    bool find_fmt(); // 用于查找文件中的"fmt "块
    bool find_data(); // 用于查找文件中的"data"块
public:
    WaveReader();
    ~WaveReader();
    bool open_file(char *filename); // 打开文件
    void close_file(); // 关闭文件
    const WaveFormatExtensible &get_fmtext(); // 返回fmtext的引用
    // 把size个字节的音频数据读到buffer缓冲区
    // 返回实际读取的字节数，如果已经读取完了返回-1
    int read_data(void *buffer, unsigned int size);
    void reset(); // 重置读取指针，即重新从data_pos的位置读取
};